package unq.uis.robots.model;

import java.io.Serializable;

import org.uqbar.commons.model.UserException;
import org.uqbar.commons.utils.Observable;

@Observable
public class Robot implements Serializable{
	
	private static final long serialVersionUID = 1L;
	public static final String NOMBRE = "nombre";
	public static final String PODERTOTAL = "poderTotal";
	public static final String DANIO = "danio";
	public static final String DUENIO = "duenio";	
	public static final String PRECIOBASE = "precioBase";
	public static long contador = 0;
	

	private String nombre;
	private int poderTotal;
	private int danio;
	private Jugador duenio;	
	private long id;
	
	
	public Robot(String nombre, int poderTotal, int danio) {
		this.id = Robot.obtenerId();
		this.setNombre(nombre);
		this.setPoderTotal(poderTotal);
		this.setDanio(danio);		
	}
	
	public Robot(String nombre, int poderTotal) {
		this.id = Robot.obtenerId();
		this.setNombre(nombre);
		this.setPoderTotal(poderTotal);
		this.setDanio(0);
	}
	
	
	public Robot() {}
	
	public static long obtenerId(){
		contador++;
		return contador;
	}


	public int poderEfectivo(){
		return (this.getPoderTotal() *(100 - this.getDanio())) / 100;
	}
	
	public int precio(){
		return this.poderEfectivo() * 50;
	}
	
	public void reparar(int costo, int danioAReparar){		
		if(this.duenio.getDinero() < costo)
			throw new UserException("Dinero insuficiente");
		this.danio -= danioAReparar;
		if(this.danio < 0)
			this.danio = 0;
		this.duenio.cobrar(costo);
	}
	
	public void mejorar(MejoraDeRobot mejora) {
		int costo = mejora.getPrecio();
		if(this.duenio.getDinero() < costo)
			throw new UserException("Dinero insuficiente");
		
		this.poderTotal += mejora.getPuntosDePoder();
		
		this.duenio.cobrar(costo);
	}
	
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;	
	}
	public int getPoderTotal() {
		return poderTotal;
	}
	public void setPoderTotal(int poderTotal) {
		this.poderTotal = poderTotal;
	}
	public int getDanio() {
		return danio;
	}
	public void setDanio(int danio) {
		this.danio = danio;	
	}

	public Jugador getDuenio() {
		return duenio;
	}

	public void setDuenio(Jugador duenio) {
		this.duenio = duenio;
	}

	@Override
	public String toString() {
		return this.getNombre();
	}
	
	public int getPrecioBase(){
		return this.precio();
	}

	public void setId(long id) {
		this.id = id;
	}

	public long getId() {
		return id;
	}
	

	
}
